/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hoja2;

/**
Universidad del Valle de Guatemala
Algoritmos y Estructura de Datos
Luis Ernesto Orozco Godinez
CarnÈ:10382
23 de Julio del 2011
Hoja de Trabajo #2
Clase: Stack
 * Descripcion: Esta clase contendra el relleno de los metodos de la interfaz de la clase pila
*/


/**
 *
 * @author luisorozco
 */

// se importan las diferentes librerias que se utilizaran en la clase

import java.lang.NullPointerException;
import java.util.LinkedList;
import java.util.Vector;
import java.util.List;


// se hace una clase generica utlizando <T> y a la vez implementando la interfaz que es generica que es pila
public class Stack<T> implements Pila<T> {
    
        // se hace un atributo privado pila de LinkedList''
       protected static LinkedList pila;

    

    // se crea una lista de LinkedList que permite que se agreguen o eliminen elementos en la lista al inicio o al final.
      // lo cual es fundamental para nuestro programa
            public Stack(){
                pila = new LinkedList();
            }

            // este metodo verifica si la lista esta vacia o no
            public boolean isEmpty() {
                return pila.isEmpty();
            }

                // este metodo permite introducir un elemento dentro de nuestra pila
            public  void  push(T elemento) 
            {
                 pila.add(elemento);
            }

            //este metodo regresar cual es el tamaño de la pila
            public int size() {
               return pila.size();

            }

            // este metodo borrara todo elemento que este alamacenado en la pila
            public void Erase()
            {
                pila.clear();
            }
            //este metodo sacara un elemento de la pila
            public  T pop(){
                if(!pila.isEmpty())
                {
                        // se crea una variable para que cuando se saque el ultimo elemento
                        // se elemine por asi decirlo su posicion
                        T temp = (T) pila.getLast();
                            pila.remove(temp);
                            return temp;
                }
                else
                {
                        System.out.println("No hay ningun elemento en la Pila");
                        return null;
                }
            }

            // este metodo hara que se pseudo saca un elemento de la pila, pero en realidad es solo 
            //para saber que elemento es pero sin sacarlo de la pila
            public T peek(){
                if(!pila.isEmpty())
                    
                        // regresara o mostrara el ultimo elemento que este en la pila
                        return (T) pila.getLast();
                else
                {
                        System.out.println("No hay ningun elemento en la Pila");
                return null;
                }
            }
    
}